#include"comando.h"
#include"expressao.h"
#include<string>
#include<iostream>

#ifndef CMDATRIB_H
#define CMDATRIB_H

using namespace std;
class Cmd_Atrib : public Comando {
	private:
		string variavel;
		Expressao * expressao;
		string palavra;
	public:
		Cmd_Atrib (map<string,string> *memoria, int pc, string variavel, Expressao *expressao, string palavra) : Comando (memoria, pc) {
			this->variavel=variavel;
			this->expressao=expressao;
			this->palavra=palavra;
		}
		virtual int executar () {
			//verifica se a variavel ja foi instanciada ou não
			if (memoria->find(variavel) == memoria->end()) { //a variavel não existe
				if (expressao == NULL)
					memoria->insert(pair<string,string>(variavel,palavra));
				else 
					memoria->insert(pair<string,string>(variavel,to_string(expressao->processa_expressao())));
			}
			else { //variavel existe, deve-se atualizar o mapa
				if (expressao == NULL) 
					memoria->find(variavel)->second=palavra;
				else 
					memoria->find(variavel)->second=to_string(expressao->processa_expressao());
			}
			return pc;
		}
};
#endif
